#ifndef RSCXX_H
#define RSCXX_H

#include <map>
#include <memory>
#include <string>
#include <vector>

#include "rust/cxx.h"

struct MultiBuf;
struct BlobMetadata;

class RsCxxCls {
public:
  RsCxxCls();
  ~RsCxxCls();
  bool isNull() const;
  bool isString() const;

  double getNumber() const;
  std::unique_ptr<std::string> getString() const;
  // std::vector<std::string> &getVector() const;

  int put(MultiBuf &buf) const;
  void tag(int id, rust::Str tag) const;
  BlobMetadata metadata(int id) const;

private:
  std::string test_str;
  double test_n;
  std::vector<std::string> array;
  class impl;
  std::shared_ptr<impl> impl;
};

std::unique_ptr<RsCxxCls> getRsCxx();

#endif
